/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package py.una.pol.pweb.compraventa;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import py.una.pol.pweb.compraventa.modelo.Producto;
import py.una.pol.pweb.compraventa.modelo.Proveedor;


/**
 *
 * @author irene
 */

@ManagedBean
@ViewScoped
public class compraBean {
    
    Proveedor proveedorSelected;
    Producto productoSelected;
    int cantidadAComprar=0;
    Producto productoAComprar;
    List<Producto> listaAComprar=new ArrayList<Producto>();
    Producto productoAComprarSelected;
    List<Compradetalle> compraDetalleRealizado;

    public List<Compradetalle> getCompraDetalleRealizado() {
        return compraDetalleRealizado;
    }

    public void setCompraDetalleRealizado(List<Compradetalle> compraDetalleRealizado) {
        this.compraDetalleRealizado = compraDetalleRealizado;
    }

    public Producto getProductoAComprar() {
        return productoAComprar;
    }

    public void setProductoAComprar(Producto productoAComprar) {
        this.productoAComprar = productoAComprar;
    }

    public List<Producto> getListaAComprar() {
        return listaAComprar;
    }

    public void setListaAComprar(List<Producto> listaAComprar) {
        this.listaAComprar = listaAComprar;
    }

    public Producto getProductoAComprarSelected() {
        return productoAComprarSelected;
    }

    public void setProductoAComprarSelected(Producto productoAComprarSelected) {
        this.productoAComprarSelected = productoAComprarSelected;
    }

    public int getCantidadAComprar() {
        return cantidadAComprar;
    }

    public void setCantidadAComprar(int cantidadAComprar) {
        this.cantidadAComprar = cantidadAComprar;
    }

    public Producto getProductoSelected() {
        return productoSelected;
    }

    public void setProductoSelected(Producto productoSelected) {
        this.productoSelected = productoSelected;
    }

    public Proveedor getProveedorSelected() {
        return proveedorSelected;
    }

    public void setProveedorSelected(Proveedor proveedorSelected) {
        this.proveedorSelected = proveedorSelected;
    }
    
    public void agregarProductoAComprar(){
        
        productoAComprar = new Producto();
        productoAComprar.setIdproducto(productoSelected.getIdproducto());
        productoAComprar.setNombre(productoSelected.getNombre());
        productoAComprar.setDescripcion(productoSelected.getNombre());
        productoAComprar.setPreciocompra(productoSelected.getPrecioventa());
        productoAComprar.setPrecioventa(productoSelected.getPrecioventa());
        productoAComprar.setCantidad(cantidadAComprar);
        Iterator iter = listaAComprar.iterator();
        boolean existe = false;
        //listaAComprar.add(productoAComprar);
        
        while (iter.hasNext()) {
            Producto productoActual = (Producto) iter.next();
            System.out.println(productoAComprar.getNombre());
            if (productoActual.getIdproducto() == productoAComprar.getIdproducto()) {
                
                existe = true;
                FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage(null, new FacesMessage("Error", "Ya se cargo este producto, elimine de la lista para cambiar"));

            }
        }
        if (existe==false){
            listaAComprar.add(productoAComprar);
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Exito", "Se agregó el producto al carrito"));

        }
    
    }
    
        public void eliminarProductoAComprar(){
        
        List <Producto> aux=new ArrayList<Producto>();
        Iterator it=listaAComprar.iterator();
        while (it.hasNext()) {

            Producto element = (Producto)it.next();
            if (productoAComprarSelected!=null){
                if (element.getIdproducto()!=productoAComprarSelected.getIdproducto()){
                    //listaAVender.remove(element);
                    //break;
                    aux.add(element);
                    FacesContext context = FacesContext.getCurrentInstance();
                                    
                }else{

                }
                
            }else{
                FacesContext context = FacesContext.getCurrentInstance();
                context.addMessage(null, new FacesMessage("no se selecciono registro", "Se agregó el producto al carrito"));
            }
            

        }
        listaAComprar=aux;
        
        
    
    }
        

    public void confirmarProductoAComprar(){
    
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CompraVentaPU");
        EntityManager em = emf.createEntityManager();
        FacesContext context = FacesContext.getCurrentInstance();
        try{
            //código para actualizar el saldo del cliente y el stock del producto
            compraDetalleRealizado=new ArrayList<Compradetalle>();    

            em.getTransaction().begin();
            Compra comprax= new Compra();
            comprax.setIdproveedor(proveedorSelected);
            comprax.setNrofactura("");
            Calendar c1 = Calendar.getInstance();
            comprax.setFecha(c1.getTime());
            
            
            Proveedor userx = em.find(Proveedor.class, proveedorSelected.getIdproveedor());
            
            for (Producto elemento:listaAComprar){
            
                //userx.setSaldo(userx.getSaldo()+(elemento.getCantidad()*elemento.getPrecioventa()));
                Producto productox=em.find(Producto.class, elemento.getIdproducto());
                productox.setCantidad(productox.getCantidad()+elemento.getCantidad());
                Compradetalle compradetallex=new Compradetalle();
                compradetallex.setIdproducto(productox);
                
                compradetallex.setIdcompra(comprax);
                
                compradetallex.setObservaciones("");
                compradetallex.setPreciocompra(productox.getPreciocompra());
                
                compradetallex.setPrecioventa(productox.getPrecioventa());
                compradetallex.setCantidad(productox.getCantidad().doubleValue());
                em.persist(compradetallex);
                compraDetalleRealizado.add(compradetallex);
            
            }
            comprax.setCompradetalleList(compraDetalleRealizado);
            
            
            em.persist(comprax);
            em.getTransaction().commit();
            proveedorSelected = new Proveedor();
            context.addMessage(null, new FacesMessage("Se registró la compra correctamente", "agregado correctamete."));


            
        }catch (Exception e){
            
            context.addMessage(null, new FacesMessage("Ocurrió un error al registrar la compra", "agregado correctamete."));
        
        }finally{
            em.close();
        }
    
    
    }        

    
}
